package com.cn.por.auto.datasource.bo.impl;
import cn.hsa.base.web.vo.PageFactory;
import cn.hsa.base.web.vo.PageResultData;
import com.cn.por.auto.datasource.dao.DataSourceConfigADAO;
import com.cn.por.auto.datasource.bo.DataSourceConfigABO;
import com.cn.por.auto.datasource.entity.DataSourceConfigADO;
import com.cn.por.auto.datasource.dto.DataSourceConfigADTO;
import com.cn.por.auto.datasource.dto.DataSourceConfigADTOConverter;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.springframework.stereotype.Service;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.util.StringUtils;
import java.util.ArrayList;
import java.util.List;
/**
 * <p>数据源管理实现层</p>
 * @author xx
 * @since 2024-11-02
 */
@Service
public class DataSourceConfigABOImpl extends ServiceImpl<DataSourceConfigADAO, DataSourceConfigADO>  implements DataSourceConfigABO {

    @Autowired
    private DataSourceConfigADTOConverter dataSourceConfigADTOConverter; 
 
    @Autowired
    private DataSourceConfigADAO dataSourceConfigADAO;

    @Override
    public DataSourceConfigADTO add(DataSourceConfigADTO dataSourceConfigADTO){
      DataSourceConfigADO dataSourceConfigADO = toDO(dataSourceConfigADTO);
      dataSourceConfigADAO.insert(dataSourceConfigADO);
      return toDTO(dataSourceConfigADO);
    }

    @Override
    public Boolean delete(String id){
      DataSourceConfigADO dataSourceConfigADO = new DataSourceConfigADO();
      dataSourceConfigADO.setDataSourceConfigId("id");
      dataSourceConfigADO.setValiFlag("1");
      return dataSourceConfigADAO.updateById(dataSourceConfigADO)>0;
    }

    @Override
    public DataSourceConfigADTO update(DataSourceConfigADTO dataSourceConfigADTO){
      DataSourceConfigADO dataSourceConfigADO = toDO(dataSourceConfigADTO);
      dataSourceConfigADAO.updateById(dataSourceConfigADO);
      return toDTO(dataSourceConfigADO);
    }

    @Override
    public DataSourceConfigADTO get(String id){
      return toDTO(dataSourceConfigADAO.selectById(id));
    }

    @Override
    public PageResultData<DataSourceConfigADTO> getPage(int pageNo, int pageSize, DataSourceConfigADTO dataSourceConfigADTO){
      Page<DataSourceConfigADO> page = PageFactory.createPage(pageNo, pageSize);
      DataSourceConfigADO dataSourceConfigADO = toDO(dataSourceConfigADTO);
      QueryWrapper<DataSourceConfigADO> queryWrapper = new QueryWrapper<DataSourceConfigADO>();
      if (!StringUtils.isEmpty(dataSourceConfigADO.getDataName()) ){
        queryWrapper.like("data_name", dataSourceConfigADO.getDataName());
      }
      

      if (!StringUtils.isEmpty(dataSourceConfigADO.getDataType()) ){
        queryWrapper.like("data_type", dataSourceConfigADO.getDataType());
      }
      
      queryWrapper.orderByAsc("data_source_config_id");
      page = dataSourceConfigADAO.selectPage(page, queryWrapper);
      // do list --> dto list
      List<DataSourceConfigADO> records = page.getRecords();
      List<DataSourceConfigADTO> list = new ArrayList<DataSourceConfigADTO>();
      for (DataSourceConfigADO row : records) {
        list.add(toDTO(row));
      }
      PageResultData<DataSourceConfigADTO> result = PageFactory.createPage(list, page);
      return result;
    }

    private DataSourceConfigADO toDO(DataSourceConfigADTO dataSourceConfigADTO){
      DataSourceConfigADO dataSourceConfigADO = dataSourceConfigADTOConverter.convertToDataSourceConfigADO(dataSourceConfigADTO);
      return dataSourceConfigADO;
    }

    private DataSourceConfigADTO toDTO(DataSourceConfigADO dataSourceConfigADO){
      DataSourceConfigADTO dataSourceConfigADTO = dataSourceConfigADTOConverter.convertToDataSourceConfigADTO(dataSourceConfigADO);
      return dataSourceConfigADTO;
    }
}